﻿package igz.fleaxy.util 
{
	
	/**
	 * ...
	 * @author Pedro Sánchez Aparicio - pedro.sanchez@intelygenz.com [www.Intelygenz.com]
	 */
	public class RegExpType 
	{
		// TODO: No funciona la comprobación de que no comienze con espacio !!!
		static public const $COMMON_CHARS:RegExp = /^[ ]*/;

		// Números enteros
		static public const $INTEGER:RegExp     = /^-{0,1}\d+$/;
		static public const $INTEGER_POS:RegExp = /^\d+$/;
		static public const $INTEGER_NEG:RegExp = /^-\d+$/;

		// Número decimales
		static public const $DECIMAL:RegExp 		= /^-{0,1}\d*\.{0,1}\d+$/;
		static public const $DECIMAL_POS:RegExp  = /^\d*\.{0,1}\d+$/;
		static public const $DECIMAL_NEG:RegExp  = /^-\d*\.{0,1}\d+$/;

		// Letras del alfabeto
		static public const $ALPHABETS:RegExp 			 = /^[a-zA-Z]+$/;
		static public const $ALPHABETS_WITH_SPACES:RegExp = /^[a-zA-Z ]+$/;
		
		// Letras y números
		static public const $ALPHANUMERIC:RegExp = /^[a-zA-Z0-9]+$/;
		static public const $ALPHANUMERIC_WITH_SPACE:RegExp = /^[a-zA-Z0-9 ]+$/;
		
		// DNI
		static public const $DNI:RegExp = /^\d{1,8}+[a-zA-Z]+$/;
		
		// Correo electrónico
		static public const $MAIL:RegExp = /^[\w\.-]*[a-zA-Z0-9]@[a-zA-Z][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
		
		// Código postal
		static public const $POSTAL_CODE:RegExp = /^[0-9]{5,5}([- ]?[0-9]{4,4})?$/;
		
		// Dirección URL
		//static public const $URL:RegExp = /^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$/;
		static public const $URL:RegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
		
		// Hora
		static public const $HOUR:RegExp = /^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/;
		
		// Fecha con formato DD/MM/YYYY
		static public const $DATE:RegExp = /^\d{1,2}\/\d{1,2}\/\d{2,4}$/;
		
		// Número de tarjeta de crédito (AMEX, VISA, MASTERCARD y DISCOVER)
		static public const $CREDIT_CARD:RegExp = /^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$/;
		
		// Moneda de cambio con formato XX.YY
		static public const $MONEY:RegExp = /^(-)?\d+(\.\d\d)?$/;
		
		// Nombre de usuario con formato standard. Example userName_1234
		static public const $USERNAME:RegExp = /^[a-z\d_]{4,28}$/;
		
		// Contraseña: Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales.
		static public const $PASSWORD_TYPE_1:RegExp = /(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$/;
		
		// Direcciones ip v4
		static public const $IP_V4:RegExp = /^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/;
		
		// Colores hexadecimales con formato #XXXXXX
		static public const $COLOR_HEX:RegExp = /^#(?:(?:[a-f\d]{3}){1,2})$/;
		
		
		public function RegExpType() { }
		
	}
	
}